package com.mars.pay.config;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * Gson 配置类
 * 解决 JDK 21 下 Gson 无法序列化 LocalDateTime 的问题
 *
 * @author Mars
 */
@Configuration
public class GsonConfig {

    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 创建支持 LocalDateTime 的 Gson 实例
     */
    @Bean
    public Gson gson() {
        return new GsonBuilder()
                // 注册 LocalDateTime 序列化器
                .registerTypeAdapter(LocalDateTime.class,
                        (JsonSerializer<LocalDateTime>) (src, typeOfSrc, context) ->
                                context.serialize(src.format(DATE_TIME_FORMATTER)))
                // 注册 LocalDateTime 反序列化器
                .registerTypeAdapter(LocalDateTime.class,
                        (JsonDeserializer<LocalDateTime>) (json, typeOfT, context) ->
                                LocalDateTime.parse(json.getAsString(), DATE_TIME_FORMATTER))
                // 美化输出
                .setPrettyPrinting()
                // 处理 null 值
                .serializeNulls()
                .create();
    }
}

